iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0
自我挑戰組

C# 和 SQL 探索之路 - 2系列 第 6

Day 6: C# Delegate 介紹

  • 分享至 

  • xImage
  •  

C# 有一個特色稱之為 Delegate (委派)。

以下是我對 A tour of C# - Major language areas - Microsoft Learn 中委派的解讀。


根據介紹,委派即是「包含特定參數清單和回傳類別方法的參考」。

委派將方法視為物件的實體,且可以做為參數傳入。在其它的程式語言中 (例如 C 語言),有類似的「函式指標」概念。但是委派為物件導向且型別安全 (Type-safe)。

例如網頁裡的例子:


delegate double Function(double x); // 宣告委派,需傳入 double 參數,並回傳 double 變數

class Multiplier
{
	double _factor;

	public Multiplier(double factor) => _factor = factor;

	public double Multiply(double x) => x * _factor;
}

class DelegateExample
{
	static double[] Apply(double[] a, Function f) // 傳入 double 陣列和委派方法
	{
    	var result = new double[a.Length];
    	for (int i = 0; i < a.Length; i++) result[i] = f(a[i]);
    	return result;
	}

	public static void Main()
	{
    	double[] a = { 0.0, 0.5, 1.0 };
    	double[] squares = Apply(a, (x) => x * x); // 傳入 Lambda 運算式
    	double[] sines = Apply(a, Math.Sin); // 傳入 Math.Sin 方法
    	Multiplier m = new(2.0);
    	double[] doubles = Apply(a, m.Multiply); // 傳入物件的 Multiply 方法
	}
}

上述程式碼傳入一個委派方法,該委派方法需要傳入一個 double 參數,並回傳 double 變數作為結果。

如果傳入的方法是物件方法,則呼叫方法期間 this 會指向該委派的物件。

另外也可參考這篇很棒的文章:DAY 17 委派 - iT 邦幫忙


上一篇
Day 5: C# 資料結構: Hashset
下一篇
Day 7: C# Platform Invoke (P/Invoke)
系列文
C# 和 SQL 探索之路 - 230
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言